DatadogでAWSインテグレーションのモニターを作成してみた
こんにちは、CX事業本部の若槻です。
今回は、DatadogでAWSとのインテグレーションの設定を行い、AWSサービスのメトリクスを監視するモニターを作成してみたのでご紹介します。
Datadogとは
Datadogとは、様々なサーバーやアプリケーションから取得したメトリクスやログデータをもとにアラート通知を実装したり、分析を行ったりすることができるクラウド型のモニタリングツールです。
また、DatadogにはAWS、Azure、Google Cloudなど主要なクラウドサービスに対するインテグレーションが標準で用意されており、このインテグレーションを利用することにより監視対象のサービスとDatadogの連携を簡単に実装することができます。
DatadogでAWSインテグレーションのモニターを作成してみる
ここから、Datadogアカウントのサインアップから、AWSインテグレーションのモニターを作成し実際にアラートを動作させてみるまでの流れを、悪戦苦闘の記録をそのままに残しつつ、キャプチャ付きで紹介していきます。
Datadogアカウントのサインアップ
まずはDatadogのアカウントを無償版でサインアップします。
Datadogトップページ を開きます。画面右上にある[無料で試す]をクリックし、情報を入力して[サインアップ]をクリックします。
[2. Your Stack]ページが開き、Datadogと接続するスタックについて聞かれます。[Next]をクリックします。(画像では[Tell us about your stack]で「AWS」を選択していますが、今回は結局不要となりました)
[3. Agent Setup]ページが開き、Datadog Agentのインストールを促されます。Agentが最低1つは必要とのことなので、今回はCloud9環境にインストールするために、[Amazon Linux]を選択します。[New Installation]欄のAgentインストール用のコマンドをコピーします。
コピーしたコマンドをCloud9(Amazon Linux)上のShellで実行し、Datadog Agentをインストールします。
$ DD_AGENT_MAJOR_VERSION=7 DD_API_KEY=************ bash -c "$(curl -L https://raw.githubusercontent.com/DataDog/datadog-agent/master/cmd/agent/install_script.sh)" % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 15080 100 15080 0 0 71132 0 --:--:-- --:--:-- --:--:-- 71132 * Installing YUM sources for Datadog * Installing the Datadog Agent package Loaded plugins: priorities, update-motd, upgrade-helper Cleaning repos: amzn-main amzn-updates datadog epel 19 metadata files removed 9 sqlite files removed 0 metadata files removed Loaded plugins: priorities, update-motd, upgrade-helper Resolving Dependencies --> Running transaction check ---> Package datadog-agent.x86_64 1:7.19.2-1 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: datadog-agent x86_64 1:7.19.2-1 datadog 133 M Transaction Summary ================================================================================ Install 1 Package Total download size: 133 M Installed size: 441 M Downloading packages: warning: /var/cache/yum/x86_64/latest/datadog/packages/datadog-agent-7.19.2-1.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID e09422b3: NOKEY Public key for datadog-agent-7.19.2-1.x86_64.rpm is not installed Retrieving key from https://yum.datadoghq.com/DATADOG_RPM_KEY_E09422B3.public Importing GPG key 0xE09422B3: Userid : "Datadog, Inc <package@datadoghq.com>" Fingerprint: a4c0 b90d 7443 cf6e 4e8a a341 f106 8e14 e094 22b3 From : https://yum.datadoghq.com/DATADOG_RPM_KEY_E09422B3.public Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : 1:datadog-agent-7.19.2-1.x86_64 1/1 Enabling service datadog-agent Loading SELinux policy module for datadog-agent. Couldn’t load system-probe policy. To be able to run system-probe on your host, please install or update the selinux-policy-targeted and policycoreutils-python (or policycoreutils-python-utils depending on your distribution) packages. Then run the following commands, or reinstall datadog-agent: semodule -i /etc/datadog-agent/selinux/system_probe_policy.pp semanage fcontext -a -t system_probe_t /opt/datadog-agent/embedded/bin/system-probe restorecon -v /opt/datadog-agent/embedded/bin/system-probe No datadog.yaml file detected, not starting the agent Verifying : 1:datadog-agent-7.19.2-1.x86_64 1/1 Installed: datadog-agent.x86_64 1:7.19.2-1 Complete! * Adding your API key to the Agent configuration: /etc/datadog-agent/datadog.yaml * Starting the Agent... stop: Unknown instance: datadog-agent start/running, process 4293 Your Agent is running and functioning properly. It will continue to run in the background and submit metrics to Datadog. If you ever want to stop the Agent, run: sudo stop datadog-agent And to run it again run: sudo start datadog-agent
Datadogの画面に戻り、10秒ほど待つと[Next]がクリック可能となったので、クリックして次に進みます。
[2. Your Stack]ページで何らかのスタックを選択していた場合はオプションでIntegrationのインストールが可能です。「AWS」を選択した場合は下記のようになります。[Install Integration]をクリックしてみます。
[Amazon Web Services Integration]ダイアログが開き、AWSのどのサービスをモニター対象とするか、および接続するアカウント情報を求められます。今回は一旦サインアップを完了させるため、[☓]でダイアログを閉じて[Skip]をクリックし、サインアップを完了させました。
サインアップしたアカウントのトップページが開きました。
[Events]を選択すると、アカウント上で行われたイベントが確認できます。サインアップ中にCloud9にインストールしたAgentのホストはi-038ff4fe29665bea7
というIDで管理されていることが分かります。
[Monitors] - [Manage Monitors]を見ると、[Auto] Clock in sync with NTP
というモニターが作成されています。
[Auto] Clock in sync with NTP
の詳細を見ると、host:i-038ff4fe29665be
とあり、これがサインアップ時にインストールしたエージェントを監視するモニターであるようです。
これでDatadogのサインアップが完了しました。
AWSのインテグレーションのインストール
次にAWSのインテグレーションのインストールを行い、DatadogとAWSのアカウント連携を行います。
[Integrations]を選択し、「aws」でフィルターをして、AvailableなIntegration一覧から「Amazon Web Services」を選択します。
AWSのIntegration設定画面が開きます。[Configuration]タブを選択します(サインアップ時と同じ画面です)。[AWS Accout]欄ではDatadogと連携させるAWSアカウントの情報の入力が必要となります。今回は自動でRole Delegationのセットアップを行ってみるため、[Automatically Using CloudFormation]を選択します。1
ブラウザの別タブでCloudFormationスタックの作成画面が開きます。(AWSにサインインしていない場合はサインインを要求されるかと思うのでサインインします。)
[テンプレート URL]によれば、このスタックはDatadogが管理している以下のCloudFormationテンプレートを元にしたスタックであるようです。
- https://datadog-cloudformation-template.s3.amazonaws.com/aws/main.yaml
AWSTemplateFormatVersion: 2010-09-09 Description: Datadog AWS Integration Parameters: ExternalId: Description: >- External ID for the Datadog role (generate at https://app.datadoghq.com/account/settings#integrations/amazon-web-services) Type: String AllowedPattern: .+ ConstraintDescription: ExternalId is required DdApiKey: Description: >- API key for the Datadog account (find at https://app.datadoghq.com/account/settings#api) Type: String NoEcho: true AllowedPattern: .+ ConstraintDescription: DdApiKey is required DdSite: Type: String Default: datadoghq.com Description: Define your Datadog Site to send data to. For the Datadog EU site, set to datadoghq.eu AllowedPattern: .+ ConstraintDescription: DdSite is required IAMRoleName: Description: Customize the name of IAM role for Datadog AWS integration Type: String Default: DatadogIntegrationRole Permissions: Description: >- Customize the permission level for the Datadog IAM role. Select "Core" to only grant Datadog read-only permissions (not recommended). Type: String Default: Full AllowedValues: - Full - Core LogArchives: Description: >- S3 paths to store log archives for log rehydration. Separate multiple paths with comma, e.g., "my-bucket,my-bucket-with-path/path". Permissions will be automatically added to the Datadog integration IAM role. https://docs.datadoghq.com/logs/archives/rehydrating/?tab=awss3 Type: String Default: '' CloudTrails: Description: >- S3 buckets for Datadog CloudTrail integration. Separate multiple buckets with comma, e.g., "bucket1,bucket2". Permissions will be automatically added to the Datadog integration IAM role. https://docs.datadoghq.com/integrations/amazon_cloudtrail/ Type: String Default: '' DdAWSAccountId: Description: >- Datadog AWS account ID allowed to assume the integration IAM role. DO NOT CHANGE! Type: String Default: "464622532012" DdForwarderName: Type: String Default: DatadogForwarder Description: >- The Datadog Forwarder Lambda function name. DO NOT change when updating an existing CloudFormation stack, otherwise the current forwarder function will be replaced and all the triggers will be lost. InstallDatadogPolicyMacro: Type: String Default: true AllowedValues: - true - false Description: If you already deployed a stack using this template, set this parameter to false to skip the installation of the DatadogPolicy Macro again. Conditions: ShouldInstallDatadogPolicyMacro: Fn::Equals: - Ref: InstallDatadogPolicyMacro - true Resources: # A Macro used to generate policies for the integration IAM role based on user inputs DatadogPolicyMacroStack: Type: AWS::CloudFormation::Stack Condition: ShouldInstallDatadogPolicyMacro Properties: TemplateURL: "https://datadog-cloudformation-template.s3.amazonaws.com/aws/datadog_policy_macro.yaml" # The IAM role for Datadog integration DatadogIntegrationRoleStack: Type: AWS::CloudFormation::Stack Properties: TemplateURL: "https://datadog-cloudformation-template.s3.amazonaws.com/aws/datadog_integration_role.yaml" Parameters: ExternalId: !Ref ExternalId Permissions: !Ref Permissions IAMRoleName: !Ref IAMRoleName LogArchives: !Ref LogArchives CloudTrails: !Ref CloudTrails DdAWSAccountId: !Ref DdAWSAccountId Tags: - # A trick to create a conditional dependency on DatadogPolicyMacroStack # https://stackoverflow.com/questions/34607476/cloudformation-apply-condition-on-dependson Key: "DatadogPolicyMacroStackId" Value: !If [ShouldInstallDatadogPolicyMacro, !Ref DatadogPolicyMacroStack, "null"] # The Lambda function to ship logs from S3 and CloudWatch, custom metrics and traces from Lambda functions to Datadog # https://github.com/DataDog/datadog-serverless-functions/tree/master/aws/logs_monitoring ForwarderStack: Type: AWS::CloudFormation::Stack Properties: TemplateURL: "https://datadog-cloudformation-template.s3.amazonaws.com/aws/forwarder/latest.yaml" Parameters: DdApiKey: !Ref DdApiKey DdSite: !Ref DdSite FunctionName: !Ref DdForwarderName Metadata: AWS::CloudFormation::Interface: ParameterGroups: - Label: default: Required Parameters: - ExternalId - DdApiKey - DdSite - Label: default: Optional Parameters: - IAMRoleName - Permissions - LogArchives - CloudTrails - Label: default: Advanced Parameters: - DdAWSAccountId - DdForwarderName - InstallDatadogPolicyMacro ParameterLabels: ExternalId: default: "ExternalId *" DdApiKey: default: "DdApiKey *" DdSite: default: "DdSite *"
DatadogのAPI Keyは手動での指定が必要となります。Datadogの画面に戻り[Datadog API Key]のリンクをクリックして開きます。
DataDogの[Integrations] - [APIs]の画面が開きます。[API Keys]を開くとAPIキーが既定で1つ作成されているので、コピーします。
コピーしたAPIキーをスタック作成画面で[DdApiKey]欄にペーストします。また、リージョンはバージニア北部から適宜変更してください。
承認次項にチェックを入れて、[スタックの作成]をクリックします。
ネストされたものを含め4つのスタックが作成されました。
Datadogの画面に戻ります。[AWS Account ID]欄に連携させるAWSアカウントのIDを入力し、[AWS Role name]
欄に連携に利用するロール名としてDatadogIntegrationRole
を入力します。ロール名は自動作成の場合は既定でDatadogIntegrationRole
となります。
[Install Integration]をクリックしてインテグレーションをインストールします。(最初に誤ったアカウントIDやロール名を入力してしまったせいか、正しい値を入力した後も画面右上のエラーが出続けていましたが、インストールは成功しました。)また今回はどのAWSサービスを監視対象とするかのフィルター(画面左)は特に設定しませんでした。
[Integrations]の一覧にインストールされたインテグレーション一覧にAWSの各種サービスが追加されました。
これで、AWSのインテグレーションによるDatadogとAWSのアカウント連携は完了です。
AWSのインテグレーションを利用したモニターの作成
次に、Datadogとインテグレーションにより連携したAWSアカウント上のサービスを監視するモニターを作成します。
なお、今回はモニターの詳細な設定については触れず、とりあえず動くものを作ることを趣旨としたいと思います。
[Monitors]で[New Monitor]をクリックします。
モニタータイプとして[Integration]を選択します。
作成に利用するインテグレーションとして[AWS]を選択します。
モニターの設定画面が開きます。[2 Define the metric]では監視するメトリックを指定します。今回はsample-table
というDynamoDBテーブルのアイテム数を関しするようにしました。[3 Set alert conditions]ではアラートや警告を上げ下げする基準を指定します。今回は1
アイテムが検知されたらアラートを上げるようにしました。[4 Say what's happening]ではモニター名とモニターの詳細を指定します。
最後に設定画面の一番下部の[Save]をクリックして設定を保存します。
モニター一覧に戻ると作成したモニターが表示されているので選択します。
作成直後はメトリクスデータが一つも取得できていないためモニターのステータスはNO DATA
となっています。
sample-table
テーブルではあらかじめアイテムが作成済みだったので、少し経つとメトリクスデータが取得され、アラートの基準に抵触してモニターのステータスがALERT
に変わりました。
おわりに
今回はDatadogとAWSでとりあえず動くものを作ってみることを目標にしたので詳細な設定などは深くは触れられていませんが、用意されているインテグレーションの数や設定パラメータの豊富さを見る限り、本当に様々なモニタリングが行えそうだという可能性を感じました。是非とも使いこなせるようになりたいですね!
以上
- ロールを手動で用意する場合は、こちらの記事が参考になります。Datadog のAWS監視にIAMロールを利用してみた ↩